package main

import (
	"fmt"
	"time"
)

func main() {
	// 获取当前时间
	now := time.Now()
	fmt.Println(now) // 2023-11-27 14:16:39.232188 +0800 CST m=+0.000314085

	// 创建指定的 年、月、日、小时、分钟、秒钟、纳秒、时区 的时间
	t := time.Date(2023, 11, 27, 4, 10, 12, 0, time.UTC)
	t2 := time.Date(2023, 11, 27, 5, 30, 36, 0, time.UTC)
	fmt.Println(t)                                                              // 2023-11-27 04:10:12 +0000 UTC
	fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second()) // 2023 November 27 4 10 12

	// go的时间格式化与java不一样，并不是yyyy-MM-dd HH:mm:ss, 而是 2006-01-02 15:04:05 这个特殊的时间
	// 2006年 1月 2日 3点 4分 5秒；连起来就是1 2 3 4 5 6
	fmt.Println(t.Format("2006-01-02 15:04:05")) // 2023-11-27 04:10:12

	// t2 是否在 t 之后
	fmt.Println(t2.After(t)) // true

	// 得到 t2 - t 的时间差
	diff := t2.Sub(t)
	fmt.Println(diff)                           // 1h20m24s
	fmt.Println(diff.Minutes(), diff.Seconds()) // 80.4 4824

	t3, err := time.Parse("2006-01-02 15:04:05", "2023-11-27 04:10:12")
	if err != nil {
		panic(err)
	}
	fmt.Println(t3 == t) // true

	// time 转 时间戳（10位秒级），若需要13位毫秒级的： now.UnixMilli()
	timestamp10 := now.Unix()
	fmt.Println(timestamp10) // 1701065799

	// 时间戳 转 time 类型
	t4 := time.Unix(timestamp10, 0)

	fmt.Println(t4) // 2023-11-27 14:24:08 +0800 CST

	// 增加3分钟
	fmt.Println(t.Add(time.Second * 3)) // 2023-11-27 04:13:12 +0000 UTC
}
